package com.mmall.Concurrency.example.singleton;

/*
    懒汉模式，单例的实例在第一次使用的时候创建
    一开始不创建
 */

import com.mmall.Concurrency.annoations.NotThreadSafe;

/*
   instance = new SingletonExample1();
   多线程下运行两次，可能导致两次调用构造函数（如果中间有运算或者对资源的调用，则可能不适合，线程不安全）
 */
@NotThreadSafe
public class SingletonExample1 {

    //不能随便new新的对象出来，则构造方法为私有的
    private SingletonExample1(){

    }
    //单例对象
    private static SingletonExample1 instance = null;

    //静态的工厂方法
    private static SingletonExample1 getInstance(){
        if (instance == null){
            instance = new SingletonExample1();
        }

        return instance;
    }
}
